    <?php
    /**
    由于32位php无法将大的数字识别为整型,
    所以如果某些货号为很长的数字，
    在进行序列化时,linux下会识别为整型后保存到数据库b2c_goods.spec_desc字段中，
    当这些数据在windows下运行时，对货号进行反序列化时就会失败，
    导致多规格商品出错，往往出现linux下正常的多规格商品，
    在windows下需要重新开启规格的现象，
    解决办法：讲序列化字段在linux主机中进行反序列化，然后返回json_encode字段，
    windows主机下进行json_decode后重新serialize.

    **/

    class spec_desc extends PHPUnit_Framework_TestCase {  
        //linux服务器上的进行unserialize的地址
        // var $url = "http://192.168.1.100/unserialize.php";
        var $url = "http://www.jl86.cn/unserialize.php";
        //服务器代码如下:
        /*
<?php
$str = $_POST['se'];
$obj = unserialize($str);
echo json_encode(array('success'=>true,'arr'=>$obj));
// print_r($_POST);
        */

        //访问linux服务器，将序列化字符串改为arr
        function cc($se) {
            echo "\n开始解码,参数:".$se;
            $url = $this->url;
            $ch = curl_init();
            $post_data = array ("se" => $se);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            // post数据
            curl_setopt($ch, CURLOPT_POST, 1);
            // post的变量
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

            $output = curl_exec($ch);
            if($output=='false') {
                echo "\n反序列化失败:";
                dump($v);
                exit;
            }
            $arr = json_decode($output,true);
            // dump($arr['arr']);
            $_se = serialize($arr['arr']);  
            echo "\n解码成功,结果:".$_se;   
            // print_r(($output=='false').':'.$output);
            curl_close($ch);
            return $arr['arr'];
        }
        public function testChange(){

            // $temp = app::get('b2c')->model('goods')->getList('*',array('bn'=>'121446'));
            // print_r($temp);exit;

            $sql = "SELECT goods_id,spec_desc from sdb_b2c_goods where bn='121445'";
            $sql = "SELECT goods_id,spec_desc from sdb_b2c_goods where 1";
            $mdl_goods = app::get('b2c')->model('goods');
            $rows = $mdl_goods->db->select($sql); 
            foreach($rows as &$v) {
                $se = $v['spec_desc'];
                $obj = $this->cc($se);      

                //修改数据
                echo "\n开始修改数据";
                $temp = array('spec_desc'=>$obj);
                $re = $mdl_goods->update($temp,array('goods_id'=>$v['goods_id']));
                if($re) echo "\n***********数据修改完成********";
                else echo "\n*****数据修改失败";
            }
        }
    }
